/*
*    Qizx/open 3.0 beta
*
* This code is the open-source version of Qizx.
* Copyright (C) 2004-2009 Axyana Software -- All rights reserved.
*
* The contents of this file are subject to the Mozilla Public License 
*  Version 1.1 (the "License"); you may not use this file except in 
*  compliance with the License. You may obtain a copy of the License at
*  http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
*  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
*  for the specific language governing rights and limitations under the
*  License.
*
* The Initial Developer of the Original Code is Xavier Franc - Axyana Software.
*
*/
using System;
namespace System.Qizx.Api {

    /// <summary> The type of an Item as defined in the XML Query language.
    /// <para>
    /// A predefined type can be obtained from an {@link ItemFactory} - i.e. a
    /// Library or an Expression - by the method getType(name).</para>
    /// <para><b>Note</b>: in the current version, custom types are not supported.</para>
    /// </summary>
    public interface ItemType : ISequenceType {
        /// <summary> Returns the fully qualified name of the type.</summary>
        /// <returns> a qualified name, for example "xs:integer"
        /// </returns>
        QName Name {
            get;

        }
        /// <summary> Short name as a string. For example "xs:string". Such a name can also be
        /// used for obtaining a predefined type from an ItemFactory.
        /// </summary>
        /// <returns> a string which is the the short name of a predefined type, for
        /// example "decimal".
        /// </returns>
        string ShortName {
            get;

        }

        /// <summary> Returns the type from which this type is derived immediately. </summary>
        /// <returns> the parent type
        /// </returns>
        ItemType GetSuperType();

        /// <summary> Tests is this type is derived from another type.</summary>
        /// <param name="type">another Item type </param>
        /// <returns> true if this type is derived from argument type.
        /// </returns>
        bool IsSubTypeOf(ItemType type);
    }
}